#include <iostream>
#include <string>
#include "Restaurante.h"

using namespace std;


int main() {
	
	DiccTrie<ConjString> asignacion1;

	ConjString mesasmar;
	mesasmar.agregar("a");
	mesasmar.agregar("b");
	mesasmar.agregar("c");

	ConjString mesasgut;
	mesasgut.agregar("d");
	mesasgut.agregar("e");
	mesasgut.agregar("f");

	ConjString mesassua;
	mesassua.agregar("g");
	mesassua.agregar("h");
	mesassua.agregar("i");

	ConjString mesasgon;
	mesasgon.agregar("j");
	mesasgon.agregar("k");
	mesasgon.agregar("l");

	asignacion1.definir("martinez", mesasmar);
	asignacion1.definir("gutierrez", mesasgut);
	asignacion1.definir("suarez", mesassua);
	asignacion1.definir("gonzalez", mesasgon);

	Recetario r;
	r.agregarIngrediente("sal");
	r.agregarIngrediente("aceite");
	r.agregarIngrediente("tomate");
	r.agregarIngrediente("harina");
	r.agregarIngrediente("vinagre");

	MConj plato1;
	plato1.mAgregarN("sal", 5);
	plato1.mAgregarN("tomate", 5);		

	MConj plato2;
	plato2.mAgregarN("sal", 3);
	plato2.mAgregarN("harina", 45);		

	MConj plato3;
	plato3.mAgregarN("vinagre", 15);
	plato3.mAgregarN("harina", 7);		

	r.agregarPlato("platouno", plato1);
	r.agregarPlato("platodos", plato2);
	r.agregarPlato("platotres", plato3);
	
	
	

	cout << "Creé un recetario. \n\n";
	cout << "Los platos son los siguientes: \n" << r.platos() << "\n\n";
	cout << "Los ingredientes del platouno son: \n" <<r.ingredientesNecesarios("platouno") << "\n\n";
	cout << "Los ingredientes del platodos son: \n" <<r.ingredientesNecesarios("platodos") << "\n\n";
	cout << "Los ingredientes del platotres son: \n" <<r.ingredientesNecesarios("platotres") << "\n\n";

	ConjString mozos;
	mozos.agregar("martinez");
	mozos.agregar("gutierrez");
	mozos.agregar("suarez");
	mozos.agregar("gonzalez");


	Restaurante resto1(12, mozos, asignacion1, r);

	
	
	
	
	
	cout << "Los mozos del restaurante son los siguientes: \n";
	cout << resto1.verMozos();

	cout << "\nLas mesas asignadas a Martinez son : \n\n";
	
	IteradorConjString it(resto1.mesasDelMozo("martinez"));
	while (it.tieneProximo()) {
		cout << toInt(it.proximo()) << "\n";
	}
	cout << "La cantidad de mesas de Martinez es, por lo tanto: " << resto1.cantMesasMozo("martinez") << "\n\n";

	
	cout << "\nLas mesas asignadas a Gutierrez son : \n\n";

	it = IteradorConjString(resto1.mesasDelMozo("gutierrez"));
	while (it.tieneProximo()) {
		cout << toInt(it.proximo()) << "\n";
	}
	cout << "La cantidad de mesas de Gutierrez es, por lo tanto: " << resto1.cantMesasMozo("gutierrez") << "\n\n";
	
	cout << "\nLas mesas asignadas a Suarez son : \n\n";

	it = IteradorConjString(resto1.mesasDelMozo("suarez"));
	while (it.tieneProximo()) {
		cout << toInt(it.proximo()) << "\n";
	}
	cout << "La cantidad de mesas de Suarez es, por lo tanto: " << resto1.cantMesasMozo("suarez") << "\n\n";

	cout << "\nLas mesas asignadas a Gonzalez son : \n\n";

	it = IteradorConjString(resto1.mesasDelMozo("gonzalez"));
	while (it.tieneProximo()) {
		cout << toInt(it.proximo()) << "\n";
	}
	cout << "La cantidad de mesas de Gonzalez es, por lo tanto: " << resto1.cantMesasMozo("gonzalez") << "\n\n";

	cout <<"\nLa cantidad total de mesas es: " << 	resto1.cantMesas() << "\n\n";
	cout << "\nEl mozo asignado a la mesa 10 es: " <<resto1.mozoAsignado(10) << "\n\n";
	cout << "\nEl mozo asignado a la mesa 4 es: " <<resto1.mozoAsignado(4) << "\n\n";

	cout << "Creo unos pedidos. \n\n";
	MConj pedido1;
	pedido1.mAgregarN("platouno", 4);	
	pedido1.mAgregarN("platodos", 4);
	pedido1.mAgregarN("platotres", 3);		
	cout << "Este es el pedido1: " << "\n\n";
	cout << pedido1 << "\n\n";

	MConj pedido2;
	pedido2.mAgregarN("platouno", 14);	
	pedido2.mAgregarN("platodos", 3);
	cout << "Este es el pedido2: " << "\n\n";
	cout << pedido2 << "\n\n";

	MConj pedido3;
	pedido3.mAgregarN("platotres", 4);	
	pedido3.mAgregarN("platodos", 13);
	cout << "Este es el pedido3: " << "\n\n";
	cout << pedido3 << "\n\n";

	cout << "Los ingredientes necesarios para el pedido1 son: \n" << resto1.verRecetario().ingredientesPedido(pedido1);
	cout << "Los ingredientes necesarios para el pedido2 son: \n" << resto1.verRecetario().ingredientesPedido(pedido2);
	cout << "Los ingredientes necesarios para el pedido3 son: \n" << resto1.verRecetario().ingredientesPedido(pedido3);

	cout << "Compro ingredientes. \n \n";	

	resto1.comprarIngrediente("vinagre", 46);
	resto1.comprarIngrediente("aceite", 40000);
	resto1.comprarIngrediente("vino", 40000);
	resto1.comprarIngrediente("tomate", 90000);
	resto1.comprarIngrediente("sal", 30000);
	resto1.comprarIngrediente("harina", 40000);

	cout << "vinagre: " << resto1.dameStock("vinagre") << "\n\n";
	cout << "vino: " << resto1.dameStock("aceite") << "\n\n";
	cout << "aceite: " << resto1.dameStock("vino") << "\n\n";
	cout << "harina: " << resto1.dameStock("harina") << "\n\n";
	cout << "sal: " << resto1.dameStock("sal") << "\n\n";
	cout <<"Se puede preparar el pedido1? ";
	if (resto1.sePuedePreparar(pedido1))
		cout << "si\n\n"; 
	else 
		cout << "no\n\n";
	cout <<"Se puede preparar el pedido2? ";
	if (resto1.sePuedePreparar(pedido2))
		cout << "si\n\n"; 
	else 
		cout << "no\n\n";
	cout <<"Se puede preparar el pedido3? ";
	if (resto1.sePuedePreparar(pedido3))
		cout << "si\n\n"; 
	else 
		cout << "no\n\n";

	cout << "Ahora la mesa 1 está ocupada?";
	if (resto1.mesaOcupada(1))
		cout << " si\n\n"; 
	else 
		cout << " no\n\n";
	cout << "Entonces la ocupo...\n\n";
	resto1.ocuparMesa(1);
	cout << "Ahora la mesa 1 está ocupada?";
	if (resto1.mesaOcupada(1))
		cout << " si\n\n"; 
	else 
		cout << " no\n\n";
	cout << "Hago unos pedidos (pedido1, pedido2, pedido3, pedido3) para la mesa 1.\n\n";
	resto1.hacerPedido(1, pedido1);
	resto1.hacerPedido(1, pedido2);
	resto1.hacerPedido(1, pedido2);
	resto1.hacerPedido(1, pedido3);

	cout << "Ahora los pedidos pendientes de la mesa 1 son: \n" << resto1.pedidosPendientes(1);
	cout << "\n Ahora el stock es:\n";
	cout << "vinagre: " << resto1.dameStock("vinagre") << "\n\n";
	cout << "vino: " << resto1.dameStock("aceite") << "\n\n";
	cout << "aceite: " << resto1.dameStock("vino") << "\n\n";
	cout << "harina: " << resto1.dameStock("harina") << "\n\n";
	cout << "sal: " << resto1.dameStock("sal") << "\n\n";

	cout << "Preparo un plato1 en la mesa 1 \n";
	resto1.prepararPlato(1, "platouno");
	cout << "Ahora los pedidos pendientes de la mesa 1 son: \n" << resto1.pedidosPendientes(1);

}	





